package com.woniuxy.consumer.listener;

import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * @author yellow Doctor
 * @date 2025-03-26
 * @desc 蜗牛创想：www.woniuxy.com
 */
@Component
public class ConsumerListener5 {

//    @RabbitListener(queues = "confirm.queue")
//    public void sendEmail(String msg) {
//        System.out.println("我是消费者  confirm.queue中的数据 =====>" + msg);
//    }

//    @RabbitListener(queues = "confirm.queue")
//    public void sendEmail(String msg) {
//
//        //默认异常
//        int a = 10 / 0;  //MQ 服务器任务你的消息 没有ack(没有确认,返回给服务器了，监听器又开始拉取消息 循环)
//        System.out.println("我是消费者  confirm.queue中的数据 =====>" + msg);
//
//    }

    /**
     * String text   接受消息的数据
     * Channel channel  (连接通道,类似jdbc Connecation 连接对象)
     * Message  message 消息对象 (封装了很多东西)
     *
     * @param text
     * @param channel
     * @param message
     * @throws IOException
     */
//    @RabbitListener(queues = "confirm.queue")
//    public void handle(String text, Channel channel, Message message) throws IOException {
//        //获取消息属性对象
//        MessageProperties properties = message.getMessageProperties();
//        //获取消息的唯一id
//        long deliveryTag = properties.getDeliveryTag();
//        //默认使用自动应答机制，从队列中获取消息后自动应答队列，队列收到应答后再从队列中移除消费后的消息
//        try {
//            //模拟业务逻辑
//            System.out.println("接收到消息：" + text);  //花店 给你女友送花
//            //模拟出现异常
//            System.out.println(1 / 0);
//            //消费者手动确认消费消息
//            channel.basicAck(deliveryTag, false);
//
//        } catch (Exception e) {
//            //e.printStackTrace();
//            //获取重投标记
//            boolean redelivered = properties.getRedelivered();
////            System.out.println("消息重发标记：" + redelivered);
//            //如果为真就表示已经重投过了
//            if (redelivered) {
//                //消息已经被重投过，拒绝
//                channel.basicReject(deliveryTag, false);
//                System.out.println("消息已经重投过，被拒绝");
//            } else {
//                //消息没有被重投过，重投放到消息队列中
//                channel.basicNack(deliveryTag, false, true);
//                System.out.println("消息没有重投过，进行重投");
//            }
//        }
//    }
}
